/**
 * Created by Administrator on 2017/9/20.
 */
//axios ajax接口请求库
var root = 'https://cnodejs.org/api/v1';
//引用axios
var axios = require('axios');

//自定义判断元素类型js
function toType(obj) {
  return ({}).toString().call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
//参数过滤函数
function filterNull(o) {
  for (var key in o) {
    if (o[key] == null) {
      delete o[key]
    }
    if (toType(o[key] == 'string')) {
      o[key] = o[key].trim()
      if (o[key].length == 0) {
        delete o[key]
      }
    }
  }
  return o;
}

/*
 接口处理函数
 这个函数每个项目都是不一样的，我现在调整的是适用于
 https://cnodejs.org/api/v1 的接口，如果是其他接口
 需要根据接口的参数进行调整。参考说明文档地址：
 https://cnodejs.org/topic/5378720ed6e2d16149fa16bd
 主要是，不同的接口的成功标识和失败提示是不一致的。
 另外，不同的项目的处理方法也是不一致的，这里出错就是简单的alert
 */


function apiAxios(method, url, params, success, failure) {
  if (params) {
    params = filterNull(params)
  }

  axios({
    method: method,
    url: url,
    data: method === 'POST' || method === 'PUT' ? params : null,
    params: method === 'GET' || method === 'DELETE' ? params : null,
    baseURL: root,
    _withCredentials: false
  }).then(function (res) {
    if (res.data.success === true) {
      if (success) {
        success(res.data)
      }
    } else {
      if (failure) {
        failure(res.data)
      } else {
        window.alert('error: ' + JSON.stringify(res.data))
      }
    }
  }).catch(function (err) {
    let res = err.response;
    if (err) {
      window.alert('api error, HTTP CODE: ' + res.status)
      return
    }
  })
}

// 返回在vue模板中的调用接口
//返回在vue模板中的调用接口
export default{
  get:function (url,params, success, failure) {
    return apiAxios('GET',root+'/'+url,params, success, failure);
  },
  post:function (url,params, success, failure) {
    return apiAxios('POST',root+'/'+url,params, success, failure);
  },
  put:function (url,params, success, failure) {
    return apiAxios('PUT',root+'/'+url,params, success, failure);
  },
  delete:function (url,params, success, failure) {
    return apiAxios('DELETE',root+'/'+url,params, success, failure);
  }
}
